/**
 * 事件处理器类型
 */
export type EventHandler<T = any> = (event: T) => void;

/**
 * 游戏事件处理器类型
 */
export type GameEventHandler<T> = (event: ExtractEventType<T>) => void;

export type ExtractEventType<T> =
  T extends GameEventChannel<infer E> ? E : never;
/**
 * 观察者接口定义
 */
export interface IObserver<T = any> {
  notify(event: T): void;
  compar(context: any): boolean;
  isOnce(): boolean;
}

/**
 * 定义一个 dispatchEvent 事件接口，用于规范事件对象的结构，你可以继承接口来定义自己的事件对象
 */
export interface IEvent {
  // 事件类型，用于标识事件的种类
  type: string;
  // 事件目标，可选属性，表示触发该事件的元素或对象
  target?: any;
}
